package site.shihuan.helpdesk.service.manager;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import site.shihuan.helpdesk.common.util.IdWorker;
import site.shihuan.helpdesk.service.dao.SvcHiContactDao;
import site.shihuan.helpdesk.service.dao.SvcRuContactDao;
import site.shihuan.helpdesk.service.dao.SvcVisitorDao;
import site.shihuan.helpdesk.service.model.Constants;
import site.shihuan.helpdesk.service.model.po.SvcHiContactPO;
import site.shihuan.helpdesk.service.model.po.SvcRuContactPO;
import site.shihuan.helpdesk.service.model.po.SvcVisitorPO;
import site.shihuan.helpdesk.service.model.vo.ClerkVO;

import java.sql.SQLException;
import java.util.Date;
import java.util.List;

/**
 * 访客管理
 *
 * @author 周世焕
 * @Date 2021/2/20 11:52
 */
@Component
@Slf4j
public class VisitorManager {

    @Autowired
    private SvcVisitorDao svcVisitorDao;

    @Autowired
    private SvcRuContactDao svcRuContactDao;

    @Autowired
    private SvcHiContactDao svcHiContactDao;

    /**
     * 更新访客信息
     *
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public SvcVisitorPO updateVisitor(SvcVisitorPO svcVisitorPO) {
        String visitorId = svcVisitorDao.selectVisitorIdByEmail(svcVisitorPO.getTenantId(),svcVisitorPO.getEmail());
        //目前尚未存在该email的访问信息，该访客第一次访问
        if(visitorId == null) {
            svcVisitorDao.updateByPrimaryKeySelective(svcVisitorPO);
            return svcVisitorPO;
        }
        //访客已存在信息，复用该访客信息
        svcVisitorDao.deleteByPrimaryKey(svcVisitorPO.getVisitorId(),svcVisitorPO.getTenantId());
        svcVisitorPO.setVisitorId(visitorId);
        svcVisitorDao.updateByPrimaryKeySelective(svcVisitorPO);
        return svcVisitorPO;
    }

    /**
     * 查询正在等待接入的客户
     *
     * @param tenantId
     * @return
     */
    public List<SvcVisitorPO> findWaitingVisitors(String tenantId) {
        return svcVisitorDao.selectWaitingVisitors(tenantId);
    }

    /**
     * 查询正在等待接入的客户
     *
     * @param tenantId
     * @return
     */
    public List<SvcVisitorPO> findVisitors(String tenantId) {
        return svcVisitorDao.selectVisitors(tenantId);
    }

    /**
     * 查询该客户端是否已有记录
     *
     * @param tenantId
     * @param visitorId
     * @return
     */
    public SvcVisitorPO findVisitor(String visitorId,String tenantId) {
        return svcVisitorDao.selectByPrimaryKey(visitorId, tenantId);
    }

    /**
     * 创建新的Visitor
     * @param clientId
     */
    public SvcVisitorPO createVisitor(String clientId,String tenantId) {
        SvcVisitorPO visitorPO = new SvcVisitorPO();
        visitorPO.setTenantId(tenantId);
        visitorPO.setVisitorId(clientId);
        visitorPO.setOnline(Constants.STATUS_OFFLINE);
        svcVisitorDao.insertSelective(visitorPO);
        return visitorPO;
    }

    /**
     * 查询当前该访客一对一联系的客服，没有则返回Null
     * @param visitorId
     */
    public ClerkVO findMyDeskClerk(String visitorId,String tenantId) {
        return svcRuContactDao.selectMyClerk(visitorId,tenantId);
    }

}
